package com.wanxi.education.service.impl;

import com.wanxi.education.mapper.BStatisticMapper;
import com.wanxi.education.model.vo.statistic.CertCategoriesVO;
import com.wanxi.education.model.vo.statistic.RankOfStudentPurchasedCourseVO;
import com.wanxi.education.service.BStatisticService;
import com.wanxi.education.service.StatisticService;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.HashMap;
import java.util.Map;
import java.util.Set;

/**
 * @Author: Kang
 * @Date: 2021/9/27 9:15
 * @Description: B端统计业务逻辑层
 * @Version: 1.0
 */
@Service
public class BStatisticServiceImpl implements BStatisticService {

    @Autowired
    private StatisticService statisticService;

    @Autowired
    private BStatisticMapper bStatisticMapper;

    /**
     * 证书大类的证书数量总量
     * @return
     */
    @Override
    public Set<CertCategoriesVO> numberOfCertCategories() {
        Set<CertCategoriesVO> certCategoriesVOSet = statisticService.numberOfCertCategories();
        return certCategoriesVOSet;
    }

    /**
     * 机构学员购买课程总数排名前七
     *  1、通过机构负责人Id获取到所在机构ID
     *  2、通过机构ID在用户表中查找到属于该机构的学生(不包含机构负责人)
     *  3、通过学生ID查询学生都购买了那些证书
     *  3.1、通过证书ID查询所属课程总数
     *  4、以学生ID为分组，查询所属课程总数
     *  5、根据课程总数进行降序排序，并取出前七
     * @param loginBId@return
     */
    @Override
    public Set<RankOfStudentPurchasedCourseVO> rankOfStudentPurchasedCourse(Long loginBId) {
        Set<RankOfStudentPurchasedCourseVO> rankOfStudentPurchasedCourseVOSet = bStatisticMapper.rankOfStudentPurchasedCourse(loginBId);
        return rankOfStudentPurchasedCourseVOSet;
    }

    /**
     * 当前机构注册学员总数
     *  1、通过机构负责人Id获取到所在机构ID
     *  2、通过机构ID在用户表中查找到属于该机构的学生总数(不包含机构负责人)
     * @param loginBId@return
     */
    @Override
    public Map<String, Object> totalNumberOfEmployees(Long loginBId) {
        Map<String,Object> map = new HashMap<>(2);
        Long registerCount = bStatisticMapper.totalNumberOfEmployees(loginBId);
        map.put("message","当前机构注册学员总数");
        map.put("registerCount",registerCount);
        return map;
    }

    /**
     * 当前机构总购课数量
     *  1、通过机构负责人Id获取到所在机构ID
     *  2、通过机构ID在用户表中查找到属于该机构的学生ID(不包含机构负责人)
     *  3、通过学生ID查询学生都购买了那些证书
     *  3.1、通过证书ID查询所属课程总数
     *  4、将各证书所属课程总数进行统计
     * @param loginBId @return
     * @return
     */
    @Override
    public Map<String, Object> totalNumberOfCoursePurchased(Long loginBId) {
        Map<String,Object> map = new HashMap<>(2);
        Long courseCount = bStatisticMapper.totalNumberOfCoursePurchased(loginBId);
        map.put("message","当前机构总购课数量");
        map.put("buyLessonCount",courseCount);
        return map;
    }
}
